package com.example.demo.config;

import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


/**
 * [Sa-Token 权限认证] 配置类
 * @author click33
 *
 */
@Configuration
public class WebConfigure implements WebMvcConfigurer {

    /**
     * 注册 Sa-Token 拦截器打开注解鉴权功能
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册 Sa-Token 拦截器打开注解鉴权功能
        registry.addInterceptor(new AuthInterceptor(handle -> {
            // SaManager.getLog().debug("----- 请求path={}  提交token={}", SaHolder.getRequest().getRequestPath(), StpUtil.getTokenValue());

            // 指定一条 match 规则
            SaRouter
                    .match("/acc/**")    // 拦截的 path 列表，可以写多个
                    .notMatch("/acc/doLogin")     // 排除掉的 path 列表，可以写多个
                    .check(r -> StpUtil.checkLogin());        // 要执行的校验动作，可以写完整的 lambda 表达式

            // 权限校验 -- 不同模块认证不同权限
            SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
            SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
            SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
            SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
            SaRouter.match("/comment/**", r -> StpUtil.checkPermission("comment"));

            // 甚至你可以随意的写一个打印语句
            SaRouter.match("/router/print", r -> System.out.println("----啦啦啦----"));

            // 写一个完整的 lambda
            SaRouter.match("/router/print2", r -> {
                System.out.println("----啦啦啦2----");
                // ... 其它代码
            });

            /*
             * 相关路由都定义在 com.pj.cases.use.RouterCheckController 中
             */

        })).addPathPatterns("/**");

    }


    /**
     * 自定义过滤器
     * @return
     */
    @Bean
    public FilterRegistrationBean mldongFilterRegistrationBean () {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MySysFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        return filterRegistrationBean;
    }


}